package com.mdd.admin.service;

import com.mdd.admin.validate.commons.PageValidate;
import com.mdd.admin.validate.ClientCrmProjetDetailCreateValidate;
import com.mdd.admin.validate.ClientCrmProjetDetailUpdateValidate;
import com.mdd.admin.validate.ClientCrmProjetDetailSearchValidate;
import com.mdd.admin.vo.ClientCrmProjetDetailListedVo;
import com.mdd.admin.vo.ClientCrmProjetDetailDetailVo;
import com.mdd.common.core.PageResult;
import com.mdd.common.entity.CustomerMian;

import java.util.List;
import java.util.Map;

/**
 * 项目基本信息服务接口类
 * @author LikeAdmin
 */
public interface IClientCrmProjetDetailService {

    /**
     * 项目基本信息列表
     *
     * @author LikeAdmin
     * @param pageValidate 分页参数
     * @param searchValidate 搜索参数
     * @return PageResult<ClientCrmProjetDetailListedVo>
     */
    PageResult<ClientCrmProjetDetailListedVo> list(PageValidate pageValidate, ClientCrmProjetDetailSearchValidate searchValidate);

    /**
     * 项目基本信息详情
     *
     * @author LikeAdmin
     * @param id 主键ID
     * @return ClientCrmProjetDetailDetailVo
     */
    ClientCrmProjetDetailDetailVo detail(Integer id);

    /**
     * 项目基本信息新增
     *
     * @author LikeAdmin
     * @param createValidate 参数
     */
    void add(ClientCrmProjetDetailCreateValidate createValidate);

    /**
     * 项目基本信息编辑
     *
     * @author LikeAdmin
     * @param updateValidate 参数
     */
    void edit(ClientCrmProjetDetailUpdateValidate updateValidate);

    /**
     * 项目基本信息删除
     *
     * @author LikeAdmin
     * @param id 主键ID
     */
    void del(Integer id);

    /**
     * 项目政策匹配公司
     * <p>
     * 根据项目政策的星级要求，匹配符合条件的公司列表。匹配规则如下：
     * - 三星：匹配数量 >= 三星要求数 且 < 四星要求数
     * - 四星：匹配数量 >= 四星要求数 且 < 五星要求数
     * - 五星：匹配数量 >= 五星要求数
     *
     * @param searchValidate 搜索条件，包含项目ID、筛选星级和公司名称
     * @return 匹配的公司列表
     * @throws IllegalArgumentException 当项目不存在时抛出
     */
    List<CustomerMian> matching(ClientCrmProjetDetailSearchValidate searchValidate);

}
